package main
import(
	"fmt"
	_"io"
	"net"
)

func process(conn net.Conn){
	//循环接收客户端发送的数据
	defer conn.Close() //关闭连接
	for {
		//创建一个新的切片
		buf := make([]byte,1024)
		//1.等待客户端通过conn发送信息
		//2.如果客户端没有发送信息 ，那么协程一直阻塞这里
		fmt.Printf("服务器再等待客户端%s发送信息\n", conn.RemoteAddr().String())
		n,err := conn.Read(buf)//从conn中读取接收的信息
		if err != nil{
			fmt.Println("客户端退出")
			return
		}
		//3.显示客户端发送的内容到服务器的终端
		fmt.Print(string(buf[:n])) //n代表读到的实际内容
	}
}

func main(){
	fmt.Println("server listen...")
	//1.tcp表示使用网络协议是tcp
	//2. 0.0.0.0:8888 表示在本地监听 8888端口
	listen,err := net.Listen("tcp","0.0.0.0:8888")
	if err != nil{
		fmt.Println("listen err = ",err)
		return
	}

	defer listen.Close() //延时关闭接口

	//循环等待客户端连接
	for {
		//等待客户端连接
		fmt.Println("等待客户端来连接...")
		conn,err := listen.Accept()
		if err != nil{
			fmt.Println("accept() err=",err)
		} else{
			fmt.Printf("accept() success,con=%v 客户端IP=%v\n",conn,conn.RemoteAddr())
		}
		//这里准备起协程为客户端服务
		go process(conn)
	}

}
